package process

import (
	"encoding/json"
	"fmt"
	"my-go-chat/message"
	"my-go-chat/model"
)

type PmsProcess struct {
	//仅面对对象思想使用
}

//这里需要涉及对方在线 和不在线 发送
func (pp *PmsProcess) RetransMes(mes *message.Message) (err error) {
	var privateMes message.PrivateMes
	err = json.Unmarshal([]byte(mes.Data), &privateMes)
	if err != nil {
		return fmt.Errorf("反序列化私聊消息异常 : %w", err)
	}

	//这里也加入用户的名字，发送消息后接收者可以知道发送者的名字
	// model.MyUserDao.GetNameById(privateMes.SendUser.UserId)

	up, ok := UserMgr.onlineUsers[privateMes.RecUserId]
	if ok { //该用户在线 直接转发就行
		data, err := json.Marshal(mes)
		if err != nil {
			return fmt.Errorf("序列化私聊消息异常 : %w", err)
		}
		SendMesToEachOnlineUser(data, up.Conn)
		return nil
	}

	//这里的情况是用户不在在线列表上   先进行判断 用户存在
	ok, err = model.MyUserDao.UserIsExists(privateMes.RecUserId)
	if err != nil {
		return fmt.Errorf("转发操作异常 : %w", err)
	}
	if !ok {
		//说明发送的用户不存在
	}

}

func SendMesToCach(mes *message.Message) (err error) {

}

//不再服务端的在线列表中 分为两种情况  用户不存在  或者 用户不在线 这两种情况需要分别处理

func GetMesFromCach(userId int) (err error, historyMes []message.HistoryMes) {

}
